package com.itheima.d4_proxy2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

import static java.lang.reflect.Proxy.newProxyInstance;

public class ProxyUtil {
    //1.创建代理对象
    public static UserService createProxy(UserService s) {
        //创建代理对象
        UserService proxy = (UserService) newProxyInstance(
                //参数1：用于指定一个类加载器
                ProxyUtil.class.getClassLoader(),
                //参数2：指定生成的代理长什么样子，也就是有哪些方法
                s.getClass().getInterfaces(),
                //参数3：用来指定生成的代理对象要干什么事情
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //获取方法的名字
                        String methodName = method.getName();
                        //判断方法名相同的时候
                        Object rs = null ;
                        if ("login".equals(methodName) || "deleteUsers".equals(methodName) || "selectUsers".equals(methodName)) {
                            long time1 = System.currentTimeMillis();
                            //把真正的对象叫过来干活
                            rs = method.invoke(s, args);

                            long time2 = System.currentTimeMillis();

                            long time = time2 - time1;
                            System.out.println((methodName + "方法耗时：" + time / 1000.0) + "秒");


                        }
                        return rs;
                    }
                }
        );
        return proxy;
    }
}
